home *** CD-ROM | disk | FTP | other *** search
- on echo
- !*******************************************************************!
- ! !
- ! SORITEC Sampler Financial Functions !
- ! (Chapter 7) !
- ! !
- !*******************************************************************!
- !
- ! SORITEC Sampler contains most of the common financial functions
- ! used in project evaluation and other economic analysis studies.
- ! These functions are:
- !
- ! (1) Internal Rate of Return
- ! (2) Present Value
- ! (3) Loan Amortization
- !
- ! Some examples used to demonstrate financial functions are drawn from
- ! M. Wohl and B.V. Martin, "Traffic Systems Analysis for Engineers
- ! and Planners". New York: McGraw-Hill, 1967, p. 215. As the
- ! examples are not specific to traffic engineering, they are used
- ! for benchmarking only.
- !
- !*******************************************************************!
- ! !
- ! Loan Amortization !
- ! (Section 7.3) !
- ! !
- !*******************************************************************!
- !
- ! To demonstrate the various features of the AMORT command, assume
- ! a loan for $100.00 issued for 5 years. Repayment is assumed to
- ! occur at the end of each period so that if the loan is made at
- ! t=1, repayment occurs at the end of t=1,2,3,4,5. Interest on the
- ! loan is 6 percent, expressed at an annual rate.
- !
- ! The AMORT command can be used to calculate annual payments under
- ! different payback assumptions. For example, if equal or uniform
- ! payments are made over the 5 year period, or if annual payments
- ! cover interest charges only with a balloon payment at the end of
- ! the loan, annual payments can be calculated easily.
- !
- ! Let's set up the problem by defining the value of the loan, the
- ! interest rate and the loan period.
- !
-
- SET loan = 100
- SET rate = .06
- USE 1 5
-
- !
- ! Annual payments associated with equal or uniform repayments over
- ! the five-year loan period are calculated using the command:
- !
-
- AMORT payment loan rate
-
- !
- ! The resulting "payment" is returned as a CONSTANT. You may want to
- ! store these data as a time-series of payments for further analysis.
- ! Well, we do, anyway, and it is done with a simple assignment statment.
- ! We'll call the time-series "pay_stream_1'.
- !
-
- pay_stream_1 = payment
- PRINT pay_stream_1
-
- !
- ! If you want to calculate annual payments using the "Rule of 78",
- ! the command is:
- !
-
- AMORT(RULEOF78) payment 100 .06
-
- !
- ! If annual payments consist of only interest with repayment of the
- ! principal in the last period, they are estimated by including the
- ! BALLOON parameter in the command line, e.g.,
- !
-
- AMORT(BALLOON=100) payment loan rate
-
- !
- ! We'll save the payments as a time-series in the variable "pay_stream_2"
- ! for future use.
- !
-
- pay_stream_2 = payment
-
- !
- ! Note that we must add the balloon payment in the final year of the loan
- ! to derive the correct payment stream.
- !
-
- USE 5
- REVISE pay_stream_2 = pay_stream_2 + 100
- USE 1 5
- PRINT pay_stream_2
-
- !
- ! If a loan is scheduled with irregular payments during the life of the
- ! loan, auxilliary payments time-series can be specified in the command
- ! line. The auxilliary payments differ from balloon payments in that
- ! payments to principal are assumed to occur at the same time regular
- ! payments are made. Thus, periodic payments associated with a balloon
- ! payment of x at the end of a loan will not be the same as those
- ! associated with an auxilliary payment schedule with a lump sum payment
- ! of x in the last payment period. This is best illustrated in an
- ! example.
- !
- ! For the $100 loan at 6% interest, create an auxilliary time-series
- ! containing a lump sum payment in year 5, e.g.,
- !
-
- balloon_payment_series = 0
- USE 5 5
- REVISE balloon_payment_series = 100
- USE 1 5
- PRINT balloon_payment_series
-
- !
- ! Now calculate annual payments with the AMORT command. This time, we
- ! do not enter the "BALLOON=" parameter but instead include the
- ! "balloon_payment_series" as the last argument in the command line.
- !
-
- AMORT payment loan rate balloon_payment_series
-
- !
- ! Note the difference between this amortization schedule and the one with
- ! the $100 balloon payment. Although inappropriate for estimating
- ! repayment schedule for typical balloon payment loans, this option is
- ! particularly useful for loans requiring periodic lump sum payments.
- ! For example, if half the principal is due at the end of year 2 and half
- ! in year 5, the command sequence to calculate annual payments is:
- !
-
- balloon_payment_series = 0
- USE 2
- REVISE balloon_payment_series = 50
- USE 5
- REVISE balloon_payment_series = 50
- USE 1 5
- PRINT balloon_payment_series
- AMORT payment loan rate balloon_payment_series
-
- !
- ! If the interest associated with a loan or investment is quoted in a
- ! periodicity other than payment schedule, the AMORT command will convert
- ! the periodicity of the interest rate to that of the current USE period.
- ! Either SIMPLE or COMPOUND conversion is permitted. These latter keywords
- ! are only relevant when periodicity conversion is specified.
- !
- ! To illustrate this option consider a one-year CD for $1000 with an
- ! effective yield of 10.5% compounded daily purchased, say, in January
- ! of this year. Interest payments on the CD are calculated monthly.
- ! We can calculate the monthly yield with the following set of commands.
- !
- ! Set up the parameters for the problem.
- !
-
- SET daily_interest = .105/365
- SET CD_amount = 1000
- USE 1985m1 1985m12
- AMORT(PERIOD=D,COMPOUND,BALLOON=1000) monthly_yield CD_amount daily_interest
- PRINT monthly_yield
-
- !
- ! The total you get from your investment can then be calculated directly.
- !
-
- SET total_yield = CD_amount + monthly_yield * 12
- PRINT total_yield
-
- !*******************************************************************!
- ! !
- ! Present Value !
- ! (Section 7.2) !
- ! !
- !*******************************************************************!
- !
- ! The PV command calculates the new present value of a stream of
- ! net benefits or costs associated with a financial venture given
- ! an interest rate or time-series of interest rates. Optional
- ! modifiers in the command line allow you to convert the periodicity
- ! of the interest rate to conform to the net income stream and
- ! to change interest calculation from the default, COMPOUND, to
- ! SIMPLE. The "net income stream" may also be specified as two
- ! time-series, "benefits" and "costs" - SORITEC Sampler will calculate
- ! the difference for you.
- !
- ! Let's take a look at the Present Value estimates associated with
- ! the payment streams of some of the loans we analyzed in the previous
- ! section.
- !
- ! This is also a good check of the consistency between the AMORT and
- ! PV commands since normally, the present value of the loan at the end of
- ! the period should equal the amount of the loan. Calculate
- ! the present value of the loan with uniform payments with the command:
- !
- USE 1 5
-
- PV present_value_1 pay_stream_1 rate
-
- !
- ! Note that the amount of the loan is less than the present value. Upon
- ! inspection, the relation between the two variables is:
- !
- ! present_value_1/(1 + rate) = loan
- !
- ! The reason for this is that the AMORT command assumes the loan is
- ! dispensed at the beginning of period t=1 and repayments are made
- ! at the end of periods t=1,2,...,n. This makes SORITEC Sampler's
- ! amortization estimates consistent with most amortization tables.
- ! The PV command, on the other hand, assumes the loan is dispensed in
- ! period t=0 and repayments are made at the beginning of periods
- ! t=1,2,...,n. To make the estimates consistent, simply divide the
- ! present value estimate by (1 + rate), e.g.,
- !
-
- present_value_1 = present_value_1/(1 + rate)
- PRINT present_value_1
-
- !
- ! A similar result is obtained from the payment stream associated with
- ! the balloon payment amortization schedule, i.e.,
- !
-
- PV present_value_2 pay_stream_2 rate
- present_value_2 = present_value_2/(1 + rate)
- PRINT present_value_2
-
- !
- ! Let's now calculate, for each loan schedule, the present values of
- ! the ith-year payments on the $100 loan. While we're at it, let's
- ! calculate the interest and principal owed at the end of each period.
- !
- ! We can do this in a DOT-loop with a nested DO-loop.
- ! Some preliminary variable assignments and format statement
- ! specifications are required.
- !
-
- SET indicator = 0
- 200 format(///7x,'Repayment Schedule for a 5-year Loan of $100 at 6% Interest')
- 201 format(21x,'Uniform Payments over 5 Years'/)
- 202 format(7x,'Annual Interest Payments Plus Principal at End of 5th Year'/)
- 203 format(3x,' Interest owed at Principal owed at')
- 204 format(' end of kth year end of kth year Total payment at', &
- ' Present value of')
- 205 format(' k (prior to payment) (prior to payment)',2x, &
- 'end of kth year kth year payment')
- 206 format(' - ------------------ ------------------',2x, &
- '--------------- ----------------')
- 207 format(f3.0,5x,f6.2,12x,f6.2,13x,f6.2,10x,f6.2)
- USE 1 5
- fill k 1 2 3 4 5
-
- DOT pay_stream_1 pay_stream_2
-
- SET indicator = indicator + 1
-
- !
- ! Initialize the time-series in which we will store the results. These
- ! are a series of present values, an interest paid series and a series
- ! comprising the remaining principal on the loan.
- !
-
- USE 1 5
- pres_val_series = 0
- interest_series = 0
- principal_series = 0
-
- !
- ! Initialize other constants that will be used in calculations.
- !
-
- SET principal = loan
- SET sum_present_value = 0
- DO i = 1 TO 5
-
- !
- ! Calculate the interest on the principal remaining in the time period.
- !
-
- SET interest = principal * rate
-
- USE i i
-
- !
- ! Calculate the principal repaid with the total payment, which is the
- ! difference between the total payment paid in the period and the
- ! interest paid in the period.
- !
-
- SET payment = :
-
- SET principal_paid = payment - interest
-
- !
- ! Assign the principal remaining in the current period to the
- ! appropriate element in a time-series of remaining principal at t.
- !
-
- REVISE principal_series = principal
-
- !
- ! Calculate the remaining principal on the loan at the start of the
- ! next period (equal to the remaining principal at t minus principal
- ! paid during t).
- !
-
- SET principal = principal - principal_paid
-
- !
- ! Now estimate the present value of payment stream.
- !
- !
- ! First, set the time period.
- !
-
- USE 1 i
-
-
- PV present_value : rate
- SET present_value = (present_value/(1+rate)) - sum_present_value
- SET sum_present_value = sum_present_value + present_value
-
- !
- ! Assign the present value, interest and principal estimates to the
- ! appropriate element of the "pres_val_series", "interest_series" and
- ! "principal_series" time-series.
- !
-
- USE i i
- REVISE pres_val_series = present_value
-
- REVISE interest_series = interest
-
- !
- ! That's it for the DO-loop. Wait while Sampler grinds through the
- ! loop. Each time it executes the PV command, Sampler will print out
- ! the unadjusted present value estimates (before dividing by 1+rate).
- !
-
- END
-
- !
- ! Print out the resulting series
- !
-
- USE 1 5
- !
- ! Write out the series in a table.
- !
-
- OFF ECHO
- WRITE(200)
- IF indicator > 1; THEN; WRITE(202); ELSE ; WRITE(201)
- WRITE(203)
- WRITE(204)
- WRITE(205)
- WRITE(206)
- WRITE(207) (k interest_series principal_series : pres_val_series)
- ON ECHO
-
- ENDDOT
-
- !*******************************************************************!
- ! !
- ! Internal Rate of Return !
- ! (Section 7.1) !
- ! !
- !*******************************************************************!
- !
- ! The internal rate of return of an investment is calculated by
- ! SORITEC Sampler with the IRR command. IRR calculations use
- ! a discounted income stream procedure to calculate the rate of
- ! return. Thus, the PV and IRR commands are consistent. We
- ! illustrate the IRR command with an example comparison of two
- ! mutually exclusive project alternatives with the following
- ! characteristics:
- !
- ! Project A Project B
- ! Project Service Life 10 years 30 years
- ! Capital Outlays in Year 0 $400,000 $1,000,000
- ! Annual Project Earnings $56,951 $76,577
- ! over Service Life
- !
- ! Initialize the data for each alternative and calculate
- ! the internal rate of return for each.
- !
- ! Project A:
- !
-
- USE 1 10
- project_a_earnings = 56951
- project_a_capital_cost = 400000
-
- IRR(CAPITAL=400000,TOLB=.0000001,MAXIT=50) rate_of_return_a project_a_earnings
-
- !
- ! To demonstrate the consistency between the IRR and PV commands,
- ! calculate the net present value of the project earnings stream
- ! using the rate of return estimated by the IRR command.
- !
-
- PV net_present_value project_a_earnings rate_of_return_a
-
- !
- ! Note that instead of using the CAPITAL modifier in the IRR command,
- ! we could have subtracted the initial capital cost from the annual
- ! earnings in the first period, i.e.,
-
- USE 1 1
- REVISE project_a_earnings = project_a_earnings - project_a_capital_cost
- USE 1 10
- IRR rate_of_return_a project_a_earnings
-
-
- !
- ! Project B:
- !
-
- USE 1 30
- project_b_earnings = 76577
- project_b_capital_cost = 1000000
-
- IRR(CAPITAL=1000000,TOLB=.001,MAXIT=50) rate_of_return_b &
- project_b_earnings
-
- !
- ! Note that the project earnings does not have to be specified as
- ! as "net" in the IRR command line. For example, we could define
- ! a cost stream for project B as a time series, e.g.,
- !
-
- project_b_costs = 0
- USE 1
- REVISE project_b_costs = 1000000
- USE 1 30
-
- !
- ! and then calculate the internal rate of return without the
- ! "CAPITAL=" modifier in the IRR command line.
- !
-
- IRR(TOLB=.001,MAXIT=50) rate_of_return_b &
- project_b_earnings project_b_costs
-
- !
- ! Obviously, this capability is meant for more complicated
- ! earnings and cost streams, but the example is illustrative.
- !
- ! That's it for SORITEC Sampler's financial functions!
- QUIT
-